(() => {

    // object 表示一个js对象
    let a: object
    a = {}
    a = function () {

    }

    // {} 用来指定对象中可以包含哪些属性
    // 语法：{属性名：类型，属性名：类型}
    // 在属性名加上？，表示属性是可选的
    let b: { name: string, age?: number }
    b = { name: '张三', age: 18 }

    let c: { name: string, [propName: string]: any }
    c = { name: '李四', age: 18, gender: '男' }

    // 设置函数结构的类型声明
    // 语法：(形参:类型, 形参:类型) => 返回类型
    let d: (a: number, b: number) => number;

    // string[] 表示字符串数组
    let e: string[]
    e = ['a', 'b', 'c']

    // number[] 表示数值数组
    let f: number[]

    // Array<类型>
    let g: Array<number>
    g = [1, 2, 3]

    // 元组，固定长度的数组
    // 语法[类型, 类型]
    let h: [string, string]
    h = ['hello', 'world']

    // 枚举
    enum Gender {
        Male,
        Famale,
    }
    let i: { name: string, gender: Gender }
    i = {
        name: '张三',
        gender: Gender.Male
    }
    i.gender === Gender.Male


    // & 表示同时    
    let j: { name: string } & { age: number }
    j = { name: '张三', age: 18 }


    // 类型别名
    type myType = 1 | 2 | 3 | 4 | 5
    let k: myType
    let m: myType
    k = 1
    m = 5

})()